/*
MainRadio.java
Raul Rivera 10099
Descripcion: Esta es la clase que crea el objeto radio y tambien despliega un menu principal para que el usuario decida que realizar con el radio
saldo minimo.
*/

import java.util.Scanner;
import java.util.InputMismatchException;

/**
 * 
 * @author Raul Antonio
 */
public class MainRadio{

    /**
     * 
     * @param args
     */
    public static void main(String[] args){ 
		Scanner ingreso = new Scanner(System.in); //crea un objeto scanner para ingresar caracteres desde el teclado
		int opcion;
		boolean power = false;
		boolean frecuenciafm = false; 
		Radio mi_radio = new Radio(); //crea un nuevo objeto de la clase radio
		
		do{
                        System.out.println(mi_radio); //muestra el radio con sus valores iniciales y los va cambiando dependiendo de lo que realizemos
			menu(); // despliega el menu principal de opciones 
			opcion = (int)obtenerNumero("Que es lo que desea realizar?: "); // se pide que se ingrese un numero y va revisando con que opcion concuerda
			switch(opcion){
				case 1:
					power = mi_radio.power();
					break;  // si la opcion es 1 prende o apaga el radio dependiendo del estad anterior
				case 2:
					if(power == true)
						frecuenciafm = mi_radio.cambio();
					else
                                            System.out.println("El radio esta apagado lo debe de encender primero para poder cambiar de frecuencia");
					
					break; // en este caso hace cambio de frecuencia pero solamente lo realiza si el radio esta encendido sino muestra error
				case 3:
					if(power == true)
						mi_radio.fw();
					else
                                            System.out.println("El radio esta apagado lo debe de encender primero para poder cambiar de estacion");
					break; // esta opcion revisa si el radio esta encendido entonces se mueve hacia adelante en las estaciones
				case 4:
					if(power == true)
						mi_radio.bw(); 
					else
                                            System.out.println("El radio esta apagado lo debe de encender primero para poder cambiar de estacion");
					
					break; //esta opcion mira si el radio esta encendido de lo contrario da error y va disminuyendo en las estaciones 
					
				case 5: 
					if (power == true){ //revisa si el radio esta encendido 
                                                         do{
                                                                opcion = (int)obtenerNumero("En que memoria desea guardar la estacion? hay 12 memorias: ");
                                                                if(opcion <1 || opcion > 12){
                                                                System.out.println("El radio solamente posee 12 memorias escoja un numero valido"); //revisa que se halla elegido una delas 12 memorias de lo contrario da error
                                                                }
                                                           }while (opcion >12 || opcion < 1);
						mi_radio.store(opcion-1); //si se escogio una memoria correcta se guarda la estacion actual en una localidad del arreglo
                                                opcion =1 ; 
                                        }
                                                if(power == false){ // si el radio esta apagado muestra un error 
                                                    System.out.println("El radio esta apagado de primero debe de encenderlo para poder guardar");
                                                }
					break; 
					
				case 6:
					if(power == true){ // vuelve a evaluar si el radio esta encendido
                                                        do{
                                                             opcion = (int)obtenerNumero("En que memoria desea seleccionar? hay 12 memorias: "); // programacion defensiva para que solamente se pueda ingresar una memoria valida
                                                             if(opcion < 1 || opcion > 12){
                                                                 System.out.println("El radio solo posee 12 memorias escoja un numero valido");
                                                             }
                                                                        
                                                          }while (opcion> 12 || opcion < 1);
						mi_radio.select(opcion-1); //si la memoria elegida es correcta llama al metodo y este muestra el valor guardado en esa posicion de memoria
                                                opcion = 1;
                                        }
                                        if(power == false){
						System.out.println("El radio esta apagado lo debe de encender primero para poder seleccionar una estacion");
				}
					break; 
					
				case 7:
					System.out.println("Gracias por utilizar el radio"); 
					break; // esta opcion es para salir del programa por lo que solamente muestra un mensaje de despedida
                                default:
                                    System.out.println("\nERROR: El numero ingregaso es invalido. \n"); // este es un default si no se ingresa ninguno de los anteriores se meustra un error
                                    
					
			}	
		} while (opcion != 7); 
	}	
    /**
     * 
     */
    public static void menu(){ //este es el menu del radio el cual es desplegado al inicio del programa y cada vez q se realiza modificaciones vuelve a aparecer
			System.out.println();
			System.out.println("+-------------------------------+");
			System.out.println("+--    MENU DEl RADIO       ----+");
			System.out.println("| 1. Encender el radio          |");
			System.out.println("| 2. Cambio de frecuencia AM/FM |");
			System.out.println("| 3. Forward FW                 |");
			System.out.println("| 4. Backward BW                |");
			System.out.println("| 5. Guardar Emisora            |");
			System.out.println("| 6. Muestra emisora guardada   |");
			System.out.println("| 7. Salir del programa         |");
			System.out.println("+-------------------------------+");
		}
    
    /**
     * 
     * @param mensaje
     * @return
     */
    public static double obtenerNumero(String mensaje){ // este sirve para revisar si el dato ingresado es un entero en el rango pedido
        Scanner ingreso = new Scanner(System.in);
        double num = 0;
        
        System.out.print(mensaje);
        try{
            num = ingreso.nextDouble();
        }
        catch(InputMismatchException exception){
          
            System.out.println("\nERROR: Dato invalido. ");
        }
        finally{
            ingreso.nextLine();//Atrapar el ENTER
        }
        return num;
    }
	
}